IF EXISTS(SELECT * FROM sysobjects WHERE name = 'validarInterseccionMuestraSondaje' AND type = 'P')
BEGIN
	DROP PROCEDURE validarInterseccionMuestraSondaje
END
GO
CREATE PROCEDURE validarInterseccionMuestraSondaje
(
@CodigoSondaje 		INT,
@CodigoMuestraSondaje 	VARCHAR(12),
@Desde	FLOAT,
@Hasta	FLOAT,
@CodigoTipoControlCalidad INT,
@Result	INT OUT
)
AS
/*********************************************************************
	Resumen: Devuelve lista de MuestraSondaje, -- SE Valida solo Tipo COMUN
	Parametros:
		@CodigoSondaje : Codigo de Sondaje
		@Desde : Valor inicial a validar
		@Hasta : Valor final a validar
		@Result : Resultado 1 = Error, 0 = Exito
**********************************************************************/	
SET NOCOUNT on
BEGIN 

	SET @Result = 0
	IF (@CodigoTipoControlCalidad <> 1)
	BEGIN
		GOTO Terminar
	END 
	
	DECLARE @MuestraSondaje TABLE
	(
	CodigoMuestraSondaje VARCHAR(12),
	Desde FLOAT,
	Hasta FLOAT
	)
	
	INSERT INTO @MuestraSondaje(CodigoMuestraSondaje, Desde, Hasta)
	SELECT CodigoMuestraSondaje, Desde, Hasta FROM MuestraSondaje t1 
	WITH(NOLOCK) WHERE t1.CodigoSondaje = @CodigoSondaje AND t1.CodigoTipoControlCalidad = 1 -- SOLO COMUNES
	
	IF (@CodigoMuestraSondaje = '0')
		BEGIN	   
			IF (@Hasta > 0)
				BEGIN		
					DECLARE @Serie VARCHAR(50)
					SET @Serie = 'D';
					
					SELECT @Serie = rtrim(ltrim(DescripcionCorta)) FROM SerieMuestra WHERE CodigoSerieMuestra = 1 -- Muestra Canal
					
					SELECT @CodigoMuestraSondaje = LEFT(LTRIM(STR(CONVERT(INT, ISNULL(substring(MAX(t1.CodigoMuestraSondaje), 1, 7), 0)) + 1 + 10000000)), 7) + @Serie
					FROM MuestraSondaje t1 WITH(NOLOCK) 
					WHERE t1.CodigoSondaje = @CodigoSondaje -- AND t1.CodigoMuestraSondaje <> @CodigoMuestraSondaje
					INSERT INTO @MuestraSondaje(CodigoMuestraSondaje, Desde, Hasta)
					VALUES (@CodigoMuestraSondaje, @Desde, @Hasta)
				END
		END
	ELSE
		BEGIN
			UPDATE @MuestraSondaje SET Desde = @Desde, Hasta = @Hasta WHERE CodigoMuestraSondaje = @CodigoMuestraSondaje
		END	  
		
	DECLARE @MuestraSondaje1 TABLE
	(
	Orden INT IDENTITY,
	CodigoMuestraSondaje VARCHAR(12),
	Desde FLOAT,
	Hasta FLOAT
	)
		   
	INSERT INTO @MuestraSondaje1(CodigoMuestraSondaje, Desde, Hasta)			
	SELECT CodigoMuestraSondaje, Desde, Hasta FROM @MuestraSondaje ORDER BY Desde ASC, Hasta ASC    
   
	DECLARE @CodigoAnterior	VARCHAR(3)
	DECLARE @Espacio FLOAT
	DECLARE @EspacioAnterior FLOAT
	
	SELECT TOP 1 @CodigoAnterior = t1.CodigoMuestraSondaje, @EspacioAnterior = isnull(Desde, 0) 
	FROM @MuestraSondaje1 t1 ORDER BY Orden ASC
	
	-- Valida Interseccion de segmetos
	DECLARE curMuestraSondaje CURSOR FOR
	SELECT Orden, CodigoMuestraSondaje, isnull(Desde, 0) AS Espacio FROM @MuestraSondaje1
	UNION 
	SELECT Orden, CodigoMuestraSondaje, isnull(Hasta, 0) AS Espacio FROM @MuestraSondaje1
	ORDER BY 1
	
	DECLARE @Orden INT

	
	OPEN curMuestraSondaje
	FETCH NEXT FROM curMuestraSondaje INTO @Orden, @CodigoMuestraSondaje, @Espacio								
	WHILE (@@FETCH_STATUS=0)
	BEGIN
		   	
		IF (@CodigoAnterior <> @CodigoMuestraSondaje)
			BEGIN
				IF (@Espacio - @EspacioAnterior) < 0
					BEGIN
						-- Se marca como inconstencia a ambos registros
				   		SET @Result = 1
						CLOSE curMuestraSondaje
						DEALLOCATE curMuestraSondaje	 
						GOTO Terminar		   		
					END							
			END 
		
		SET @CodigoAnterior = @CodigoMuestraSondaje 
		SET @EspacioAnterior = @Espacio
		FETCH NEXT FROM curMuestraSondaje INTO @Orden, @CodigoMuestraSondaje, @Espacio
	END
	CLOSE curMuestraSondaje
	DEALLOCATE curMuestraSondaje
	  
Terminar:
	PRINT str(@Result)
	SELECT @Result AS Result
	
END -- validarInterseccion 4, 1, 12, 34, 0 		
